package main

import (
	"fmt"
	"os"
	"strings"

	"anders-cli/internal/ai"
	"anders-cli/internal/config"
	"anders-cli/internal/multiagent"
	"anders-cli/pkg/logger"
)

func main() {
	fmt.Println("=== TUI显示问题诊断 ===")

	// 初始化日志
	if err := logger.Init(); err != nil {
		fmt.Printf("初始化日志失败: %v\n", err)
		os.Exit(1)
	}

	// 初始化配置
	if err := config.Load("config.json"); err != nil {
		logger.Error("加载配置失败: %v", err)
		os.Exit(1)
	}

	// 创建AI后端
	backend, err := ai.NewBackend()
	if err != nil {
		logger.Error("创建AI后端失败: %v", err)
		fmt.Printf("❌ 创建AI后端失败: %v\n", err)
		os.Exit(1)
	}
	fmt.Printf("✅ AI后端创建成功: %s\n", backend.Name())

	// 模拟TUI显示宽度计算
	fmt.Println("\n=== 模拟TUI显示宽度计算 ===")

	// 常见的终端窗口大小
	windowWidths := []int{80, 120, 160, 200}

	for _, windowWidth := range windowWidths {
		contentWidth := windowWidth - 4         // 减去左右边框和内边距
		actualContentWidth := contentWidth - 20 // 减去时间和前缀的空间

		fmt.Printf("终端宽度: %d\n", windowWidth)
		fmt.Printf("  内容区域宽度: %d\n", contentWidth)
		fmt.Printf("  实际文本宽度: %d\n", actualContentWidth)

		// 测试wrapText效果
		testText := "这是一个很长的测试文本，用于验证TUI显示是否会被截断和换行处理。"
		wrapped := simulateWrapText(testText, actualContentWidth)
		fmt.Printf("  换行后的行数: %d\n", len(wrapped))
		for i, line := range wrapped {
			if i >= 3 { // 只显示前3行
				fmt.Printf("    ... (还有%d行)\n", len(wrapped)-3)
				break
			}
			fmt.Printf("    行%d: %s\n", i+1, line)
		}
		fmt.Println()
	}

	// 测试PM响应长度问题
	fmt.Println("=== 测试PM响应长度 ===")

	mgr, err := multiagent.NewMultiAgentManager()
	if err != nil {
		fmt.Printf("❌ 创建多Agent管理器失败: %v\n", err)
		os.Exit(1)
	}

	err = mgr.SetMode("team")
	if err != nil {
		fmt.Printf("❌ 切换到团队模式失败: %v\n", err)
		os.Exit(1)
	}

	testTask := "请分析一下数据抓取的可行性"
	fmt.Printf("测试任务: %s\n", testTask)

	response, confidence, feedback := mgr.ProcessQueryWithReasoning(testTask, nil, nil)

	fmt.Printf("响应长度: %d 字符\n", len(response))
	fmt.Printf("置信度: %d%%\n", confidence)
	fmt.Printf("反馈: %s\n", feedback)

	// 检查响应是否会被截断
	fmt.Println("\n=== 响应截断分析 ===")
	for _, windowWidth := range windowWidths {
		contentWidth := windowWidth - 4
		actualContentWidth := contentWidth - 20

		wrapped := simulateWrapText(response, actualContentWidth)
		totalLines := len(wrapped)

		fmt.Printf("终端宽度 %d: 响应将被分成 %d 行\n", windowWidth, totalLines)

		// 估算可见行数（假设历史区域高度为20行）
		historyHeight := 20
		if totalLines > historyHeight {
			fmt.Printf("  ⚠️  响应行数(%d)超过历史区域高度(%d)，将被截断!\n", totalLines, historyHeight)
			fmt.Printf("  📊 可见比例: %.1f%%\n", float64(historyHeight)/float64(totalLines)*100)
		} else {
			fmt.Printf("  ✅ 响应完全可见\n")
		}
	}

	// 提供解决方案建议
	fmt.Println("\n=== 解决方案建议 ===")
	fmt.Println("1. 增加终端窗口宽度到至少120字符")
	fmt.Println("2. 使用分页或滚动查看完整响应")
	fmt.Println("3. 优化响应格式，减少表格使用")
	fmt.Println("4. 增加历史区域的高度")
	fmt.Println("5. 实现响应摘要功能")

	fmt.Println("\n=== 诊断完成 ===")
}

// 模拟wrapText函数
func simulateWrapText(text string, width int) []string {
	if width <= 0 {
		return []string{text}
	}

	var lines []string
	words := strings.Fields(text)
	if len(words) == 0 {
		return []string{""}
	}

	currentLine := ""
	for _, word := range words {
		// 如果当前行加上新单词会超出宽度
		if len(currentLine)+len(word)+1 > width && currentLine != "" {
			lines = append(lines, currentLine)
			currentLine = word
		} else {
			if currentLine != "" {
				currentLine += " "
			}
			currentLine += word
		}
	}

	if currentLine != "" {
		lines = append(lines, currentLine)
	}

	return lines
}
